/*
 * This file is part of aion-unique <aion-unique.org>.
 *
 *  aion-unique is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  aion-unique is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with aion-unique.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.aionemu.gameserver.world.container;

import javolution.util.FastMap;

import com.aionemu.gameserver.model.legion.LegionMember;
import com.aionemu.gameserver.model.legion.LegionMemberEx;
import com.aionemu.gameserver.world.exceptions.DuplicateAionObjectException;

/**
 * Container for storing Legion members by Id and name.
 * 
 * @author Simple
 */
public class LegionMemberContainer
{
	private final FastMap<Integer, LegionMember>	legionMemberById		= new FastMap<Integer, LegionMember>();

	private final FastMap<Integer, LegionMemberEx>	legionMemberExById		= new FastMap<Integer, LegionMemberEx>();
	private final FastMap<String, LegionMemberEx>	legionMemberExByName	= new FastMap<String, LegionMemberEx>();

	/**
	 * Add LegionMember to this Container.
	 * 
	 * @param legionMember
	 */
	public void addMember(LegionMember legionMember)
	{
		if(legionMemberById.containsKey(legionMember.getObjectId()))
			throw new DuplicateAionObjectException();
		legionMemberById.put(legionMember.getObjectId(), legionMember);
	}

	/**
	 * This method will return a member from cache
	 * 
	 * @param memberObjId
	 */
	public LegionMember getMember(int memberObjId)
	{
		return legionMemberById.get(memberObjId);
	}

	/**
	 * Add LegionMemberEx to this Container.
	 * 
	 * @param legionMember
	 */
	public void addMemberEx(LegionMemberEx legionMember)
	{
		if(legionMemberExById.containsKey(legionMember.getObjectId())
			|| legionMemberExByName.containsKey(legionMember.getName()))
			throw new DuplicateAionObjectException();
		legionMemberExById.put(legionMember.getObjectId(), legionMember);
		legionMemberExByName.put(legionMember.getName(), legionMember);
	}

	/**
	 * This method will return a memberEx from cache
	 * 
	 * @param memberObjId
	 */
	public LegionMemberEx getMemberEx(int memberObjId)
	{
		return legionMemberExById.get(memberObjId);
	}

	/**
	 * This method will return a memberEx from cache
	 * 
	 * @param memberName
	 */
	public LegionMemberEx getMemberEx(String memberName)
	{
		return legionMemberExByName.get(memberName);
	}

	/**
	 * Remove LegionMember from this Container.
	 * 
	 * @param legionMember
	 */
	public void remove(LegionMemberEx legionMember)
	{
		legionMemberById.remove(legionMember.getObjectId());
		legionMemberExById.remove(legionMember.getObjectId());
		legionMemberExByName.remove(legionMember.getName());
	}

	/**
	 * Returns true if legion is in cached by id
	 * 
	 * @param memberObjId
	 * @return true or false
	 */
	public boolean contains(int memberObjId)
	{
		return legionMemberById.containsKey(memberObjId);
	}

	/**
	 * Returns true if legion is in cached by id
	 * 
	 * @param memberObjId
	 * @return true or false
	 */
	public boolean containsEx(int memberObjId)
	{
		return legionMemberExById.containsKey(memberObjId);
	}

	/**
	 * Returns true if legion is in cached by id
	 * 
	 * @param memberName
	 * @return true or false
	 */
	public boolean containsEx(String memberName)
	{
		return legionMemberExByName.containsKey(memberName);
	}
}
